package cn.highedu.mvc;

import cn.highedu.entity.Account;
import cn.highedu.http.HttpServletRequest;
import cn.highedu.http.HttpServletResponse;
import org.checkerframework.checker.units.qual.A;

import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 账号控制器类
 */
@Controller
public class AccountController {
    /**
     * 处理账号信息注册 URL=/account/register
     * 参数HttpServletRequest处理请求
     * 参数HttpServletResponse处理响应
     * 参数Map<String, Object>处理响应内容
     */
    @RequestMapping("/account/register")
    public String register(HttpServletRequest request, HttpServletResponse response,
                           Map<String, Object> model) throws Exception {
        // 获取请求参数 name, password, email, gender
        String name = request.getParameter("name");
        String password = request.getParameter("password");
        String email = request.getParameter("email");
        String gender = request.getParameter("gender");

        // 检查用户名是否为空或者只包含空格
        if (name == null || name.trim().isEmpty()) {
            // 向消息模型中添加错误消息
            model.put("message", "用户名不能为空");
        }
        // 检查密码是否为空或者只包含空格
        if (password == null || password.trim().isEmpty()) {
            model.put("message", "密码不能为空");
        }

        // 声明一个集合
        ArrayList<Account> accounts = null;
        // 账户信息没有问题 创建账户对象并序列化
        File accountFile = new File("accounts.dat");
        // 判断文件是否存在
        if (accountFile.exists()) {
            // 如果存在 读取文件内容
            ObjectInputStream in = new ObjectInputStream(new FileInputStream(accountFile));
            accounts = (ArrayList<Account>) in.readObject();

            // 遍历所有的账户信息
            for (Account account : accounts) {
                // 如果出现了相同的用户名
                if (account.getName().equals(name)) {
                    // 返回错误信息
                    model.put("message", "用户名" + name + "已被注册");
                    break;
                }
            }
        }
        // 如果账户列表为空
        if (accounts == null) {
            // 现在无人注册
            accounts = new ArrayList<>();
        }

        // 返回消息列表model是否为空, 如果为空, 说明没有错误, 允许注册
        if (model.isEmpty()) {
            Account account = new Account(name, password, email, gender);
            // 把账户信息保存在集合中
            accounts.add(account);
            // 序列化
            ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(accountFile));
            // 保存信息
            out.writeObject(accounts);
            // 关闭文件
            out.close();
            // 返回注册成功信息
            model.put("message", "注册成功");
        }
        // 返回注册成功页面
        return "/account/message.html";
    }
    // 用户登录
    public String login(HttpServletRequest request, HttpServletResponse response,
                        Map<String, Object> model) throws Exception {
        return null;
    }
}
